From d2adcb3214435cfee6c50f34593a4803e4a1414c Mon Sep 17 00:00:00 2001 From: robertl Date: Fri, 3 Dec 2004 23:51:26 +0000 Subject: [PATCH] Add/fix track support for GPilotS. From Bernhard Spinnler. --- gpsbabel/Makefile | 4 +- gpsbabel/gpilots.c | 49 ++++++++++++++++++++++-- gpsbabel/mingw/wintesto.cmd | 28 ++++++++++++++ gpsbabel/reference/track/TrkDB-GPil.pdb | Bin 0 -> 9544 bytes 4 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 gpsbabel/reference/track/TrkDB-GPil.pdb diff --git a/gpsbabel/Makefile b/gpsbabel/Makefile index f0fc695e7..5b51336ea 100644 --- a/gpsbabel/Makefile +++ b/gpsbabel/Makefile @@ -89,8 +89,8 @@ dep: (echo -n "internal_styles.c: mkstyle.sh " ; echo style/*.style ; /bin/echo -e '\t./mkstyle.sh > internal_styles.c || (rm -f internal_styles.c ; exit 1)' ) >> /tmp/dep echo Edit Makefile and bring in /tmp/dep -VERSIONU=1_2_5_beta11192004 -VERSIOND=1.2.5_beta11192004 +VERSIONU=1_2_5_beta11302004-bob +VERSIOND=1.2.5_beta11302004-bob #VERSIONU=1_2_4 #VERSIOND=1.2.4 diff --git a/gpsbabel/gpilots.c b/gpsbabel/gpilots.c index 0a95644fb..a5fe7fe52 100644 --- a/gpsbabel/gpilots.c +++ b/gpsbabel/gpilots.c @@ -232,7 +232,11 @@ data_read(void) int lon; int sz; fi_t fi; - + int trk_num = 0; + int trk_seg_num = 1; + char trk_seg_num_buf[10]; + char *trk_name = ""; + wpt_tmp = waypt_new(); rec = (struct record *) pdb_rec->data; @@ -282,9 +286,7 @@ data_read(void) * CustomTrkHdr */ case 101: - track_head = route_head_alloc(); - track_add_head(track_head); - track_head->rte_name = xstrndup(rec->wpt.CustTrkHdr.name, sizeof(rec->wpt.CustTrkHdr.name)); + trk_name = rec->wpt.CustTrkHdr.name; sz = be_read16(&rec->wpt.CustTrkHdr.number); /* switch between custom track points and compact track points. @@ -294,7 +296,27 @@ data_read(void) case 102: tp_cust = (Custom_Trk_Point_Type *) ((char *) pdb_rec->data + sizeof(rec->header) + sizeof(rec->wpt.CustTrkHdr)); while (sz--) { + if ((int)(tp_cust->new_trk) == 1 || trk_seg_num == 1) { + /* + * Start a new track segment + */ + track_head = route_head_alloc(); + if (trk_seg_num == 1) { + track_head->rte_name = xstrdup(trk_name); + } else { + /* name in the form TRACKNAME #n */ + snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num); + track_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3); + sprintf(track_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf); + } + trk_seg_num++; + track_head->rte_num = trk_num; + trk_num++; + track_add_head(track_head); + } + wpt_tmp = waypt_new(); + /* This is even more odd. * Track data is stored as big endian while * waypoint data is little endian!? @@ -318,6 +340,25 @@ data_read(void) case 104: tp_comp = (Compact_Trk_Point_Type *) ((char *) pdb_rec->data + sizeof(rec->header) + sizeof(rec->wpt.CustTrkHdr)); while (sz--) { + if ((int)(tp_comp->new_trk) == 1 || trk_seg_num == 1) { + /* + * Start a new track segment + */ + track_head = route_head_alloc(); + if (trk_seg_num == 1) { + track_head->rte_name = xstrdup(trk_name); + } else { + /* name in the form TRACKNAME #n */ + snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num); + track_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3); + sprintf(track_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf); + } + trk_seg_num++; + track_head->rte_num = trk_num; + trk_num++; + track_add_head(track_head); + } + wpt_tmp = waypt_new(); lon = be_read32(&tp_comp->lon); lat = be_read32(&tp_comp->lat); diff --git a/gpsbabel/mingw/wintesto.cmd b/gpsbabel/mingw/wintesto.cmd index e58576b30..174479214 100644 --- a/gpsbabel/mingw/wintesto.cmd +++ b/gpsbabel/mingw/wintesto.cmd @@ -582,6 +582,34 @@ REM Navicache. CALL :COMPARE %TMPDIR%\navi.wpt reference\navicache.ref REM +REM +REM CoastalExplorer.. +@echo on +@echo Testing... +%PNAME% -r -i coastexp -f reference\coastexp.nob -o gpx -F %TMPDIR%\coastexp.gpx +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.gpx reference\coastexp.ref +@echo on +@echo Testing... +%PNAME% -r -i gpx -f %TMPDIR%\coastexp.gpx -o coastexp -F %TMPDIR%\coastexp.nob +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.nob reference\coastexp.ref2 +@echo on +@echo Testing... +%PNAME% -w -i coastexp -f reference\coastexp.nob -o gpx -F %TMPDIR%\coastexp.gpx +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.gpx reference\coastexp.ref3 +@echo on +@echo Testing... +%PNAME% -w -i gpx -f %TMPDIR%\coastexp.gpx -o coastexp -F %TMPDIR%\coastexp.nob +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.nob reference\coastexp.ref4 +REM + REM PsiTrex. A text format that can't be handled by XCSV due to context of REM data based on other data values in the file REM Waypoints first diff --git a/gpsbabel/reference/track/TrkDB-GPil.pdb b/gpsbabel/reference/track/TrkDB-GPil.pdb new file mode 100644 index 0000000000000000000000000000000000000000..00c0912334a2eedb12c4c1d1bd32a5d883c4d4e0 GIT binary patch literal 9544 zcmeI%d2m(L9S886gyoSvghU`9F@@|a5fIcQFZYB5Cxui3jKyja5+Fk$5GX3xs%fd3K#@c;9O?OAL?RDC1dJSZE}Kk0~mtn0l{O{2<~zzMX6s zpGQRc7!iXXH*9I9VVm+#^eke)H0!sp_S$1+bIe(fUe@P1!wkqfremAafaDproChhJ zO~u|r}hRpyEKE+TQ1 zgXYQBt&|MJBv1~Sr>jqkBvSrrp4k~lNk>c)<*<2ny%HHrsW#gV^b)b!e8jvk-MTtU z4Pnet^HQEKW6~g2-#<0KIG9X%6f&GKHRhE+JWqK9@-XF?dENU%kw+-C=2tf^b&`7X z>+rWbNuznw*BVvUW0i84w>+Cc) zVpT}C)#ir~!@ES?U1@dr>z+ z1ud|qRD;qrC(nk|Q}Xp3OU{OzqD58M=Y%52R>~%kks>?fS~xv3x!W}E7Qrr>d71LD2zF7k z2c<^&D#fec59vjz(=Cku0&+j)jE;$43E@f9ct_V0KOK?_Y4Vj)C6EkCpu|joa8#T6 zDc_SkVdFW5HI!uC(|9~GPlq@ZA-$34_JfZ7}`!{3@WunMM z2v>Jgk#0|1HH34uX_g53mH8^=WhpfgvVgKy`L;Kr&2e#%X_W0+VsApmQL6R2h;4%K zBx-UfzbC>`D)uiBe@dIk9!NLJMSX(AZZ>T8o0O{(^BRP6tm&4-EP|YaI6OqK^V^S8 zy522Zr;hG-3&+{vEj2GdDUP$lPhxNf?SG?$D!*%&*k;^8dmW{(@@wRI5&JU;=c;3X z#NaHje@2NG$%1f(JL062f>`Z|7r_&ny_GRZB6zxRNs98@%{@GJ1f+#AsUk^`2Fh^h z1?IE;1m#hY!5G#4l+hx*Uo$C_ygH$E-jvtUKrwnFZOvn9I8FF*%SI zAkALNKbg-7F#{kIDZRBsd|0Ucrqpv}RQIbS1Kon(&@*l&UHu^jyn=(}D z!3kpLlT7m{eNUs0LJm;I>-I$NgH%zT6!|lR=T7re`kqE(hTC^j3PfIoETqhqQi~zK zqRbU}2{Ml|U*t)M)r*xPoOMBr*`WM`K435KEShnVvQ64dIZyde1UpH_8OnJPJLDt< zYtWkW(P(7QCS!V;j&euJSDu6^%7K&he(s>R#7l~jO zb;T^zEsXjxgwGq!WfFrK<&qU5rpQVWj7EACOT8}j;8{IAg0fm-`a?V@oAiu|>WA-( z?UYIp%+)lWJI?n+`armkIk#(x#2%i;Q_p!w=9HIVq(+lbACiHIU!2o^$${Ka#SF(kAi=giqAYiy|LGxKf;-i)@4Zobt8u zzt9EuJ@Su`S(I;7KzE+_ky!6(<&c)HDq!Op%1lTFB~%4ITt*qC>uHHmK`Fnca16PR zwWO(_yc~)Tq>Pdy;s+_Fb&p?Z!ikZV~|{=HH&|4VLHu2F&gHsgDN)N{LXt?E+ec~?ER zE7!S1vNT0SMaKB7@Z2%kKZvBuJ$J&&(tPR8((rphtvgGDOa)FWcb3MTr9l<~&q(ep zjXO)@&eFKEH0~@7@(J!N4e|-@EDbUz?ko+m8SX3%ax(5L4e}E1EDdrF?ko*5IsfA< l&0U$C8r5Y-#&?;Vem%2FI%j(zll5N%b^Zr3#q}4%{{R9~D-8eu literal 0 HcmV?d00001 -- 2.30.2